home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Frameworks / Dragonsmith 1.1.1 / CW 4.5 Update / AppleEventUtils.cp < prev    next >
Encoding:
Text File  |  1994-07-04  |  5.8 KB  |  212 lines  |  [TEXT/MMCC]

  1. /*
  2.     AppleEventUtils.c
  3.     
  4.     Functions to simplify Apple event processing
  5.     
  6.     Copyright © 1992–1993 by Paul M. Hoffman
  7.     Send feedback to paul.hoffman@umich.edu -or- dragonsmith@umich.edu
  8.     
  9.     This source code may be freely used, altered, and distributed in any way as long as:
  10.         1.    It is GIVEN away rather than sold (except as expressly permitted by the author)
  11.         2.    This statement and the above copyright notice are left intact.
  12.     
  13.     Created    11 Jul 1992    Extracted GetFSSpecsFromAEDescList from Dragon.c
  14.     Modified    12 Sep 1992    Removed GetFSSpecsFromAEDescList — it's no longer needed in Dragonsmith
  15.             16 May 1993    Added AEGetNthBoolean, AEGetKeyBoolean, etc.
  16.             01 Aug 1993    Minor modifications
  17.             14 Aug 1993    Added SendToSelf
  18.       01 Jul 1994 Francis H Schiffer, 3rd - added return value to SendToSelf
  19.             
  20. */
  21.  
  22. #include    "AppleEventUtils.h"
  23. #include    "HandleUtils.h"
  24.  
  25. OSErr SendToSelf (AEEventClass eventClass , AEEventID eventID, AEDesc *directObject,
  26.                                                             AEDesc *reply, AESendMode sendMode)
  27. {
  28.     ProcessSerialNumber    selfPSN = { 0, kCurrentProcess };
  29.     AEAddressDesc        selfAddress;
  30.     AEDesc                ignoreReply;
  31.     AppleEvent            theEvent;
  32.     OSErr                err;
  33.     
  34.     err = AECreateDesc (typeProcessSerialNumber, (Ptr) &selfPSN, sizeof (ProcessSerialNumber), &selfAddress);
  35.     err = AECreateAppleEvent (eventClass, eventID, &selfAddress, kAutoGenerateReturnID, kAnyTransactionID, &theEvent);
  36.     if (reply == NULL)
  37.         reply = &ignoreReply;
  38.     if (directObject != NULL)
  39.         err  = AEPutParamDesc (&theEvent, keyDirectObject, directObject);
  40.     err = AESend (&theEvent, reply, sendMode, kAENormalPriority, kAEDefaultTimeout, NULL, NULL);
  41.  
  42.     return err;    /* fhs 1994 july 1 */
  43. }
  44.  
  45. OSErr GotRequiredParams (AppleEvent *theEvent)
  46. {
  47.     DescType    returnedType;
  48.     long            actualSize;
  49.     OSErr        err;
  50.     
  51.     err = AEGetAttributePtr (theEvent, keyMissedKeywordAttr, typeWildCard, &returnedType, NULL, 0, &actualSize);
  52.     if (err == errAEDescNotFound)
  53.         return noErr;
  54.     else if (err == noErr)
  55.         return errAEEventNotHandled;
  56.     else
  57.         return err;
  58. }
  59.  
  60. OSErr AEGetNthBoolean (AEDescList *listOrRecord, long index, AEKeyword *keyword, Boolean *result)
  61. {
  62.     DescType    typeCode;
  63.     long            actualSize;
  64.     OSErr        err;
  65.     
  66.     err = AEGetNthPtr (listOrRecord, index, typeBoolean, keyword, &typeCode, (Ptr) result, 1, &actualSize);
  67.     if (err == noErr && actualSize == 0)
  68.         return errAECoercionFail;
  69.     else
  70.         return err;
  71. }
  72.  
  73. OSErr AEGetNthShort (AEDescList *listOrRecord, long index, AEKeyword *keyword, short *result)
  74. {
  75.     DescType    typeCode;
  76.     long            actualSize;
  77.     OSErr        err;
  78.     
  79.     err = AEGetNthPtr (listOrRecord, index, typeShortInteger, keyword, &typeCode, (Ptr) result, sizeof (short), &actualSize);
  80.     if (err == noErr && actualSize < sizeof (short))
  81.         return errAECoercionFail;
  82.     else
  83.         return err;
  84. }
  85.  
  86. OSErr AEGetNthLong (AEDescList *listOrRecord, long index, AEKeyword *keyword, long *result)
  87. {
  88.     DescType    typeCode;
  89.     long            actualSize;
  90.     OSErr        err;
  91.     
  92.     err = AEGetNthPtr (listOrRecord, index, typeLongInteger, keyword, &typeCode, (Ptr) result, sizeof (long), &actualSize);
  93.     if (err == noErr && actualSize < sizeof (long))
  94.         return errAECoercionFail;
  95.     else
  96.         return err;
  97. }
  98.  
  99. OSErr AEGetNthType (AEDescList *listOrRecord, long index, AEKeyword *keyword, DescType *result)
  100. {
  101.     DescType    typeCode, tempType = '    ';
  102.     long            actualSize;
  103.     OSErr        err;
  104.     
  105.     err = AEGetNthPtr (listOrRecord, index, typeType, keyword, &typeCode, (Ptr) &tempType, sizeof (long), &actualSize);
  106.     if (err == noErr) {
  107.         if (actualSize == 0)
  108.             return errAECoercionFail;
  109.         else
  110.             *result = tempType;
  111.     }
  112.     return err;
  113. }
  114.  
  115. OSErr AEGetNthStr255 (AEDescList *listOrRecord, long index, AEKeyword *keyword, StringPtr result)
  116. {
  117.     DescType    typeCode;
  118.     long            actualSize;
  119.     OSErr        err;
  120.     
  121.     err = AEGetNthPtr (listOrRecord, index, typeChar, keyword, &typeCode, (Ptr) &result[1], 255, &actualSize);
  122.     if (err == noErr && actualSize > 255)
  123.         return errAECoercionFail;
  124.     if (err == noErr)
  125.         result[0] = actualSize;
  126.     else
  127.         result[0] = 0;
  128.     return err;
  129. }
  130.  
  131. OSErr AEGetNthList (AEDescList *listOrRecord, long index, AEKeyword *keyword, AEDescList *result)
  132. {
  133.     return AEGetNthDesc (listOrRecord, index, typeAEList, keyword, result);
  134. }
  135.  
  136. OSErr AEGetKeyBoolean (AERecord *record, AEKeyword keyword, Boolean *result)
  137. {
  138.     DescType    typeCode;
  139.     long            actualSize;
  140.     OSErr        err;
  141.     
  142.     err = AEGetKeyPtr (record, keyword, typeBoolean, &typeCode, (Ptr) result, 1, &actualSize);
  143.     if (err == noErr && actualSize == 0)
  144.         return errAECoercionFail;
  145.     else
  146.         return err;
  147. }
  148.  
  149. OSErr AEGetKeyShort (AERecord *record, AEKeyword keyword, short *result)
  150. {
  151.     DescType    typeCode;
  152.     long            actualSize;
  153.     OSErr        err;
  154.     
  155.     err = AEGetKeyPtr (record, keyword, typeShortInteger, &typeCode, (Ptr) result, sizeof (short), &actualSize);
  156.     if (err == noErr && actualSize < sizeof (short))
  157.         return errAECoercionFail;
  158.     else
  159.         return err;
  160. }
  161.  
  162. OSErr AEGetKeyLong (AERecord *record, AEKeyword keyword, long *result)
  163. {
  164.     DescType    typeCode;
  165.     long            actualSize;
  166.     OSErr        err;
  167.     
  168.     err = AEGetKeyPtr (record, keyword, typeLongInteger, &typeCode, (Ptr) result, sizeof (long), &actualSize);
  169.     if (err == noErr && actualSize < sizeof (long))
  170.         return errAECoercionFail;
  171.     else
  172.         return err;
  173. }
  174.  
  175. OSErr AEGetKeyType (AERecord *record, AEKeyword keyword, DescType *result)
  176. {
  177.     DescType    typeCode, tempType = '    ';
  178.     long            actualSize;
  179.     OSErr        err;
  180.     
  181.     err = AEGetKeyPtr (record, keyword, typeType, &typeCode, (Ptr) &tempType, sizeof (long), &actualSize);
  182.     if (err == noErr) {
  183.         if (actualSize == 0)
  184.             return errAECoercionFail;
  185.         else
  186.             *result = tempType;
  187.     }
  188.     return err;
  189. }
  190.  
  191. OSErr AEGetKeyStr255 (AERecord *record, AEKeyword keyword, StringPtr result)
  192. {
  193.     DescType    typeCode;
  194.     long            actualSize;
  195.     OSErr        err;
  196.     
  197.     err = AEGetKeyPtr (record, keyword, typeChar, &typeCode, (Ptr) &result[1], 255, &actualSize);
  198.     if (err == noErr && actualSize > 255)
  199.         return errAECoercionFail;
  200.     if (err == noErr)
  201.         result[0] = actualSize;
  202.     else
  203.         result[0] = 0;
  204.     return err;
  205. }
  206.  
  207. OSErr AEGetKeyList (AERecord *record, AEKeyword keyword, AEDescList *result)
  208. {
  209.     return AEGetKeyDesc (record, keyword, typeAEList, result);
  210. }
  211.  
  212.